package com.alianzamedica.businessobject;

import java.util.ArrayList;

import com.alianzamedica.models.ProfileModel;

/**
 * @author Carlos
 * 
 */
public class Profile extends BusinessObject {

	private Integer id;// 'PROFILE_ID', 'int(11)', 'NO', 'PRI', '',
						// 'auto_increment'
	private String name;// 'PROFILE_NAME', 'varchar(45)', 'NO', '', '', ''

	/**
	 * sets the profile id.
	 * 
	 * @param id
	 *            de profile.
	 */
	public void setId(Integer id) {
		this.id = id;
	}

	/**
	 * return the profileId.
	 * 
	 * @return the profile id.
	 */
	public Integer getId() {
		return id;
	}

	/**
	 * @param name
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 * nombre del perfil.
	 * 
	 * @return nombre del perfil.
	 */
	public String getName() {
		return name;
	}

	@Override
	public void setValueToSearch(String name) {
	}

	/**
	 * obtiene todos los modulos contenidos en el perfil.
	 * 
	 * @return lista de modulos contenidos en el perfil.
	 * @throws Exception
	 *             si ocurre algun error.
	 */
	@SuppressWarnings("unchecked")
	public ArrayList getModules() throws Exception {
		if (id != null) {
			ProfileModel model = new ProfileModel();
			return model.getModules(this.id);
		} else {
			return new ArrayList();
		}
	}

	/**
	 * agrega un modulo.
	 * 
	 * @param module
	 *            modulo que se va a agregar al perfil.
	 * @throws Exception
	 *             si ocurre error.
	 */
	public void addModule(Module module) throws Exception {
		ProfileModel pModel = new ProfileModel();
		pModel.addProfileModule(this.id, module.getId());
	}

	/**
	 * agrega un modulo por el id.
	 * 
	 * @param moduleId
	 *            id del modulo.
	 * @throws Exception
	 *             si ocurre error.
	 */
	public void addModule(Integer moduleId) throws Exception {
		ProfileModel pModel = new ProfileModel();
		pModel.addProfileModule(this.id, moduleId);
	}

	/**
	 * borra un modulo.
	 * 
	 * @param module
	 *            modulo a borrar.
	 * @throws Exception
	 *             si ocurre error.
	 */
	public void deleteModule(Module module) throws Exception {
		ProfileModel pModel = new ProfileModel();
		pModel.deleteModule(id, module.getId());
	}

	/**
	 * borrar modulo.
	 * 
	 * @param moduleId
	 *            id del modulo.
	 * @throws Exception
	 *             si ocurre error.
	 */
	public void deleteModule(Integer moduleId) throws Exception {
		ProfileModel pModel = new ProfileModel();
		pModel.deleteModule(id, moduleId);
	}

	/**
	 * @return obtiene la lista de los modulos no usados.
	 * @throws Exception
	 *             si ocurre error.
	 */
	@SuppressWarnings("unchecked")
	public ArrayList getUnusedModules() throws Exception {
		ProfileModel model = new ProfileModel();
		return model.getUnusedModules(this.id);
	}

}
